﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace PickGold.Handler
{
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HByReturnDelegate<TYPE>();
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HByReturnDelegate<TYPE, T>(T p);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HByReturnDelegate<TYPE, T, T1>(T p, T1 p1);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <typeparam name="T2">参数三的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <param name="p2">参数三</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HByReturnDelegate<TYPE, T, T1, T2>(T p, T1 p1, T2 p2);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <typeparam name="T2">参数三的类型</typeparam>
	/// <typeparam name="T3">参数四的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <param name="p2">参数三</param>
	/// <param name="p3">参数四</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HByReturnDelegate<TYPE, T, T1, T2, T3>(T p, T1 p1, T2 p2, T3 p3);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <typeparam name="T2">参数三的类型</typeparam>
	/// <typeparam name="T3">参数四的类型</typeparam>
	/// <typeparam name="T4">参数五的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <param name="p2">参数三</param>
	/// <param name="p3">参数四</param>
	/// <param name="p4">参数五</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HByReturnDelegate<TYPE, T, T1, T2, T3, T4>(T p, T1 p1, T2 p2, T3 p3, T4 p4);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <typeparam name="T2">参数三的类型</typeparam>
	/// <typeparam name="T3">参数四的类型</typeparam>
	/// <typeparam name="T4">参数五的类型</typeparam>
	/// <typeparam name="T5">参数六的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <param name="p2">参数三</param>
	/// <param name="p3">参数四</param>
	/// <param name="p4">参数五</param>
	/// <param name="p5">参数六</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HByReturnDelegate<TYPE, T, T1, T2, T3, T4, T5>(T p, T1 p1, T2 p2, T3 p3, T4 p4, T5 p5);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <typeparam name="T2">参数三的类型</typeparam>
	/// <typeparam name="T3">参数四的类型</typeparam>
	/// <typeparam name="T4">参数五的类型</typeparam>
	/// <typeparam name="T5">参数六的类型</typeparam>
	/// <typeparam name="T6">参数七的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <param name="p2">参数三</param>
	/// <param name="p3">参数四</param>
	/// <param name="p4">参数五</param>
	/// <param name="p5">参数六</param>
	/// <param name="p6">参数七</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HByReturnDelegate<TYPE, T, T1, T2, T3, T4, T5, T6>(T p, T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <typeparam name="T2">参数三的类型</typeparam>
	/// <typeparam name="T3">参数四的类型</typeparam>
	/// <typeparam name="T4">参数五的类型</typeparam>
	/// <typeparam name="T5">参数六的类型</typeparam>
	/// <typeparam name="T6">参数七的类型</typeparam>
	/// <typeparam name="T7">参数八的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <param name="p2">参数三</param>
	/// <param name="p3">参数四</param>
	/// <param name="p4">参数五</param>
	/// <param name="p5">参数六</param>
	/// <param name="p6">参数七</param>
	/// <param name="p7">参数八</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HByReturnDelegate<TYPE, T, T1, T2, T3, T4, T5, T6, T7>(T p, T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <typeparam name="T2">参数三的类型</typeparam>
	/// <typeparam name="T3">参数四的类型</typeparam>
	/// <typeparam name="T4">参数五的类型</typeparam>
	/// <typeparam name="T5">参数六的类型</typeparam>
	/// <typeparam name="T6">参数七的类型</typeparam>
	/// <typeparam name="T7">参数八的类型</typeparam>
	/// <typeparam name="T8">参数九的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <param name="p2">参数三</param>
	/// <param name="p3">参数四</param>
	/// <param name="p4">参数五</param>
	/// <param name="p5">参数六</param>
	/// <param name="p6">参数七</param>
	/// <param name="p7">参数八</param>
	/// <param name="p8">参数九</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HByReturnDelegate<TYPE, T, T1, T2, T3, T4, T5, T6, T7, T8>(T p, T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7, T8 p8);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <typeparam name="T2">参数三的类型</typeparam>
	/// <typeparam name="T3">参数四的类型</typeparam>
	/// <typeparam name="T4">参数五的类型</typeparam>
	/// <typeparam name="T5">参数六的类型</typeparam>
	/// <typeparam name="T6">参数七的类型</typeparam>
	/// <typeparam name="T7">参数八的类型</typeparam>
	/// <typeparam name="T8">参数九的类型</typeparam>
	/// <typeparam name="T9">参数十的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <param name="p2">参数三</param>
	/// <param name="p3">参数四</param>
	/// <param name="p4">参数五</param>
	/// <param name="p5">参数六</param>
	/// <param name="p6">参数七</param>
	/// <param name="p7">参数八</param>
	/// <param name="p8">参数九</param>
	/// <param name="p9">参数十</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HByReturnDelegate<TYPE, T, T1, T2, T3, T4, T5, T6, T7, T8, T9>(T p, T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7, T8 p8, T9 p9);

	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HFunction<TYPE, T>(ref T p);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HFunction<TYPE, T, T1>(ref T p, ref T1 p1);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <typeparam name="T2">参数三的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <param name="p2">参数三</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HFunction<TYPE, T, T1, T2>(ref T p, ref T1 p1, ref T2 p2);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <typeparam name="T2">参数三的类型</typeparam>
	/// <typeparam name="T3">参数四的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <param name="p2">参数三</param>
	/// <param name="p3">参数四</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HFunction<TYPE, T, T1, T2, T3>(ref T p, ref T1 p1, ref T2 p2, ref T3 p3);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <typeparam name="T2">参数三的类型</typeparam>
	/// <typeparam name="T3">参数四的类型</typeparam>
	/// <typeparam name="T4">参数五的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <param name="p2">参数三</param>
	/// <param name="p3">参数四</param>
	/// <param name="p4">参数五</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HFunction<TYPE, T, T1, T2, T3, T4>(ref T p, ref T1 p1, ref T2 p2, ref T3 p3, ref T4 p4);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <typeparam name="T2">参数三的类型</typeparam>
	/// <typeparam name="T3">参数四的类型</typeparam>
	/// <typeparam name="T4">参数五的类型</typeparam>
	/// <typeparam name="T5">参数六的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <param name="p2">参数三</param>
	/// <param name="p3">参数四</param>
	/// <param name="p4">参数五</param>
	/// <param name="p5">参数六</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HFunction<TYPE, T, T1, T2, T3, T4, T5>(ref T p, ref T1 p1, ref T2 p2, ref T3 p3, ref T4 p4, ref T5 p5);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <typeparam name="T2">参数三的类型</typeparam>
	/// <typeparam name="T3">参数四的类型</typeparam>
	/// <typeparam name="T4">参数五的类型</typeparam>
	/// <typeparam name="T5">参数六的类型</typeparam>
	/// <typeparam name="T6">参数七的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <param name="p2">参数三</param>
	/// <param name="p3">参数四</param>
	/// <param name="p4">参数五</param>
	/// <param name="p5">参数六</param>
	/// <param name="p6">参数七</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HFunction<TYPE, T, T1, T2, T3, T4, T5, T6>(ref T p, ref T1 p1, ref T2 p2, ref T3 p3, ref T4 p4, ref T5 p5, ref T6 p6);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <typeparam name="T2">参数三的类型</typeparam>
	/// <typeparam name="T3">参数四的类型</typeparam>
	/// <typeparam name="T4">参数五的类型</typeparam>
	/// <typeparam name="T5">参数六的类型</typeparam>
	/// <typeparam name="T6">参数七的类型</typeparam>
	/// <typeparam name="T7">参数八的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <param name="p2">参数三</param>
	/// <param name="p3">参数四</param>
	/// <param name="p4">参数五</param>
	/// <param name="p5">参数六</param>
	/// <param name="p6">参数七</param>
	/// <param name="p7">参数八</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HFunction<TYPE, T, T1, T2, T3, T4, T5, T6, T7>(ref T p, ref T1 p1, ref T2 p2, ref T3 p3, ref T4 p4, ref T5 p5, ref T6 p6, ref T7 p7);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <typeparam name="T2">参数三的类型</typeparam>
	/// <typeparam name="T3">参数四的类型</typeparam>
	/// <typeparam name="T4">参数五的类型</typeparam>
	/// <typeparam name="T5">参数六的类型</typeparam>
	/// <typeparam name="T6">参数七的类型</typeparam>
	/// <typeparam name="T7">参数八的类型</typeparam>
	/// <typeparam name="T8">参数九的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <param name="p2">参数三</param>
	/// <param name="p3">参数四</param>
	/// <param name="p4">参数五</param>
	/// <param name="p5">参数六</param>
	/// <param name="p6">参数七</param>
	/// <param name="p7">参数八</param>
	/// <param name="p8">参数九</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HFunction<TYPE, T, T1, T2, T3, T4, T5, T6, T7, T8>(ref T p, ref T1 p1, ref T2 p2, ref T3 p3, ref T4 p4, ref T5 p5, ref T6 p6, ref T7 p7, ref T8 p8);
	/// <summary>
	/// 有返回值托管
	/// </summary>
	/// <typeparam name="TYPE">返回值类型</typeparam>
	/// <typeparam name="T">参数一的类型</typeparam>
	/// <typeparam name="T1">参数二的类型</typeparam>
	/// <typeparam name="T2">参数三的类型</typeparam>
	/// <typeparam name="T3">参数四的类型</typeparam>
	/// <typeparam name="T4">参数五的类型</typeparam>
	/// <typeparam name="T5">参数六的类型</typeparam>
	/// <typeparam name="T6">参数七的类型</typeparam>
	/// <typeparam name="T7">参数八的类型</typeparam>
	/// <typeparam name="T8">参数九的类型</typeparam>
	/// <typeparam name="T9">参数十的类型</typeparam>
	/// <param name="p">参数一</param>
	/// <param name="p1">参数二</param>
	/// <param name="p2">参数三</param>
	/// <param name="p3">参数四</param>
	/// <param name="p4">参数五</param>
	/// <param name="p5">参数六</param>
	/// <param name="p6">参数七</param>
	/// <param name="p7">参数八</param>
	/// <param name="p8">参数九</param>
	/// <param name="p9">参数十</param>
	/// <returns>指定类型的返回值</returns>
	[Serializable]
	[ComVisible(true)]
	public delegate TYPE HFunction<TYPE, T, T1, T2, T3, T4, T5, T6, T7, T8, T9>(ref T p, ref T1 p1, ref T2 p2, ref T3 p3, ref T4 p4, ref T5 p5, ref T6 p6, ref T7 p7, ref T8 p8, ref T9 p9);
}
